package com.mtw.bbs.reply.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mtw.bbs.constant.ReplyLevelEnum;
import com.mtw.bbs.reply.pojo.dto.ReplyDto;
import com.mtw.bbs.reply.pojo.entity.ReplyIndex;
import com.mtw.bbs.reply.pojo.form.ReplyForm;
import com.mtw.bbs.reply.pojo.vo.ReplyAdminVo;
import com.mtw.bbs.reply.pojo.vo.ReplyVo;


/**
 * 评论表
 */
public interface ReplyIndexService extends IService<ReplyIndex> {


    /**
     * 管理分页获取评论
     *
     * @param page 当前页
     * @param size 分页大小
     * @param qw   查询条件
     * @return 分页结果
     */
    Page<ReplyAdminVo> getReplyAdminVoPage(int page, int size, QueryWrapper<ReplyIndex> qw);


    /**
     * 分页获评论
     *
     * @param qw           查询条件
     * @param sortType     排序方式，1为按点赞数，2为按时间排序
     * @param page         当前页
     * @param size         分页大小
     */
    Page<ReplyVo> getReplyVoPage(QueryWrapper<ReplyIndex> qw,Integer sortType,int page, int size);



    /**
     * 分页获评论,并带出子评论
     *
     * @param qw           查询条件
     * @param sortType     排序方式，1为按点赞数，2为按时间排序
     * @param page         当前页
     * @param size         分页大小
     * @param level        当前评论等级
     * @param sonSize      子评论数量
     * @return 分页结果
     */
    Page<ReplyVo> getReplyVoPageWithSon(QueryWrapper<ReplyIndex> qw, Integer sortType, int page, int size, ReplyLevelEnum level, int sonSize);



    /**
     * 分页获用户的评论
     *
     * @param page 当前页
     * @param size 分页大小
     * @param qw   查询条件
     * @return 分页结果
     */
    Page<ReplyDto> getUserReplyVoPage(int page, int size, String userId, QueryWrapper<ReplyIndex> qw);





    /**
     * 新增评论
     */
    ReplyIndex saveReply(ReplyForm form);


    /**
     * 更新评论状态
     */
    boolean updateReplyStatus(String id, Integer status);


    /**
     * 删除评论
     *
     * @param id 评论id
     * @return 删除结果
     */
    boolean deleteReply(String id);


    /**
     * 用户删除自己的评论
     *
     * @param id     评论id
     * @param userId 用户id
     * @return 删除结果
     */
    boolean deleteReplyByUserId(String id, String userId);


}

